﻿/*! 
 * 扫雷脚本1.0.0
 * 作者：范庆韬   2.soho@163.com
 * 时间: 2014-05-12 16:40
 */

var rows = 9; var cols = 9;
var bombCount = 10;  //雷数量
var WidthHeight = 20; // 高宽都是20
var lblhelpCount = 1; //帮你排雷次数

/*初始时特定的值*/
var arrBomb; //雷，系统生成的 Id
var arrBlank;//空白的 Id
var arrNumber; //数字Id
var arrNumberContent; //数值单元格与值

/*操作过程中临时值*/
var arrDoBomb; //用户标记的雷 Id
var arrDomanage; //用户操作过得标记
var arrAllDivId; //生成的所有的id
var arrTemp; //空格遍历时，记录已经遍历的Id
var numResidue;//剩余雷数目
var beginTime;//计时开始时间
var isFinish;//是否结束
var focusDivId; //焦点Id

$(document).ready(function () {
    //屏蔽右键菜单
    $(document).bind("contextmenu", function (e) {
        return false;
    });
    //监听事件 div 内容更改后 (此方法暂时去掉)
   /* $("#custMessage").bind('DOMNodeInserted', function (e) {
        if ($(e.target).html() != "") {
            clearMessage("custmessage");
        }
    });*/
    //显示设置
    if ($("input[name='levels']:checked").attr("id") == "level5") {
        $("#divCustomer").show();
    }
    //选择难度级别
    $("input[name='levels']").click(function () {
        switch (this.id) {
            case "level1": //简单的
                $("#divCustomer").hide();
                break;
            case "level2": // 正常
                $("#divCustomer").hide();
                break;
            case "level3": //困难
                $("#divCustomer").hide();
                break;
            case "level4": //做死的
                $("#divCustomer").hide();
                break;
            case "level5": //自定义的
                $("#divCustomer").show();
                break;
            default:
                $("#divCustomer").hide();
                break;
        }
    });
    $("#custMessage").html("");
    //显示答案
    $("#showAnswer").click(function () {
        $("#content2").toggle();
        if ($("#content2").is(":hidden")) {
            $("#showAnswer").html("[透视雷区]");
        }
        else {
            $("#showAnswer").html("[取消透视]");
        }
    });
    //按钮排雷开始
    $("#btnBegin").click(function () {
        if (setDefaultValue()) { //初始化值
            appendDiv(); //生成 雷区和答案区，绑定鼠标和键盘事件
            setCss(); //设置一些div样式
        }
    });
    //reStart
    $("#reStart").click(function () {
        $("#btnBegin").click(); //reStart
    });
    //重新设置
    $("#newSet").click(function () {

        $("#fieldsetManage").show();
        $("#fieldset").hide();
    });

});

//生成地雷图前的校验 （自定义校验）
function checkAndMakeBomb() {
    if (IsNumber($("#txtRows").val()) == false) {
        $("#spanLevelMessage").html("行数必须输入正整数");
        $("#txtRows").select();
        return false;
    }
    if (IsNumber($("#txtCols").val()) == false) {
        $("#spanLevelMessage").html("列数必须输入正整数");
        $("#txtCols").select();
        return false;
    }
    if (IsNumber($("#txtBombs").val()) == false) {
        $("#spanLevelMessage").html("雷数必须输入正整数");
        $("#txtBombs").select();
        return false;
    }
    rows = parseInt($("#txtRows").val());
    cols = parseInt($("#txtCols").val());
    bombCount = parseInt($("#txtBombs").val());

    if (rows <= 1) {
        $("#spanLevelMessage").html("雷区布局太小,最小 2×2"); $("#txtRows").select(); return false;
    }
    if (cols <= 1) {
        $("#spanLevelMessage").html("雷区布局太小,最小 2×2"); $("#txtCols").select(); return false;
    }
    if (rows * cols <= bombCount) {
        $("#spanLevelMessage").html("无法计算雷区布局");; $("#txtBombs").select(); return false;
    }
    if (rows * cols > 1000) {
        $("#spanLevelMessage").html("布局过大，排雷会很不方便奥"); $("#txtBombs").select(); return false;
    }

    var xx = bombCount / (rows * cols);
    if (xx < 0.12345679012345678) {
        $("#custMessage").html("是否过于简单啊？");
    }
    else if (xx >= 0.12345679012345678 && xx < 0.15625) {
        $("#custMessage").html("简单难度。");
    }
    else if (xx >= 0.15625 && xx < 0.20625) {
        $("#custMessage").html("正常难度，适玩。");
    }
    else if (xx >= 0.20625 && xx < 0.257685) {
        $("#custMessage").html("困难难度，适玩，但有难度，加了个油。");
    }
    else {
        $("#custMessage").html("很难，做死吧，哇哈哈！");
    }
    clearMessage("custmessage"); //3秒后情况
    $("#lblhelpCount").html(parseInt(bombCount * 0.1 + 0.9)); //设置能提示的次数
    return true;
}
//初始化值
function setDefaultValue() {
    var returnStr = true;
    arrBomb = new Array(); arrBlank = new Array(); arrNumber = new Array(); arrNumberContent = new Array();
    arrDoBomb = new Array(); arrDomanage = new Array(); arrAllDivId = new Array();
    arrTemp = new Array();
    focusDivId = "";
    beginTime = new Date(); isFinish = false;
    setTimeUsed();
    /**/
    var selectId = $("input[name='levels']:checked").attr("id");
    switch (selectId) {
        case "level1": //简单的
            $("#txtRows").val("9"); //行数
            $("#txtCols").val("9"); //列数
            $("#txtBombs").val("10"); //雷数
            $("#lblhelpCount").html("1");
            $("#spanLevelText").html("简单");
            break;
        case "level2": // 正常
            $("#txtRows").val("16");
            $("#txtCols").val("16");
            $("#txtBombs").val("40");
            $("#lblhelpCount").html("4");
            $("#spanLevelText").html("正常");
            break;
        case "level3": //困难
            $("#txtRows").val("16");
            $("#txtCols").val("30");
            $("#txtBombs").val("99");
            $("#lblhelpCount").html("8");
            $("#spanLevelText").html("困难");
            break;
        case "level4": //做死的
            $("#txtRows").val("16");
            $("#txtCols").val("30");
            $("#txtBombs").val("150");
            $("#lblhelpCount").html("16");
            $("#spanLevelText").html("做死");
            break;
        case "level5": //自定义的
            returnStr = checkAndMakeBomb();
            if (returnStr) {
                $("#spanLevelText").html("自定义");
            }
            clearMessage('custmessage');
            clearMessage('spanlevelmessage');

            break;
        default:
            $("#txtRows").val("9");
            $("#txtCols").val("9");
            $("#txtBombs").val("10");
            $("#lblhelpCount").html("1");
            $("#spanLevelText").html("简单");
            break;
    }

    rows = parseInt($("#txtRows").val()); //行数初始化
    cols = parseInt($("#txtCols").val()); //列数
    WidthHeight = parseInt($("input[name='divSize']:checked").val()); //雷区网格大小 20|30px
    bombCount = parseInt($("#txtBombs").val()); //雷数初始化
    numResidue = bombCount; //开始时，总雷数就是剩余雷数
    $("#spanResidue").html(numResidue); //剩余雷数初始化
    lblhelpCount = parseInt($("#lblhelpCount").html()); //可提示数初始化
    return returnStr;
}
//根据计算好的雷区，生成div ,并绑定鼠标和键盘事件
function appendDiv() {
    GetRandomBomb(); //计算雷分布
    var strHtml = "", strHtml2 = "";  //strHtml2 对比分析用的
    for (var row = 1; row <= rows; row++) {
        strHtml += "<div  class=\"divRow\">";
        strHtml2 += "<div  class=\"divRow\">";
        for (var col = 1; col <= cols; col++) {
            var _id = row.toString() + "_" + col.toString();
            arrAllDivId.push(_id);
            if ($.inArray(_id, arrBomb) < 0) {
                //不是“雷”,是空格或显示数字
                var num = getTypeFromAround(_id); var text = ""; //空值
                if (num != 0) {
                    text = num.toString(); //数值
                }
                strHtml += "<div id=\"" + _id + "\" class=\"divCommon divCol \"></div>";
                strHtml2 += "<div id=\"" + _id + "_2\" class=\"divCommon divOpen\">" + text + "</div>";
            }
            else { //雷
                strHtml += "<div id=\"" + _id + "\" class=\"divCommon divCol\"></div>";
                strHtml2 += "<div id=\"" + _id + "_2\" class=\"divCommon divOpen divCol2\"><img src=\"bomb.png\" style=\"width:" + WidthHeight + "px;height:" + WidthHeight + "px\" ></div>";
            }
        }
        strHtml += "</div>";
        strHtml2 += "</div>";
    }

    $("#content").html(strHtml); //操作区域
    $("#content2").html(strHtml2); //结果区域，作弊

    var iskeyCount = 0;

    /*键盘*/
    $(document).unbind("keydown");
    $(document).bind("keydown", function (e) {
        if (iskeyCount == 0) { //功能限制。 防止长按键盘的操作。不使用 keyUp 是因为按键弹起后再执行，感觉太慢有延迟感觉。 keypress 与 keydown 区别不大。

            if ($("#fieldset").is(":hidden") == false && isFinish == false) {
                keyDown(e.keyCode);
            }

            iskeyCount++;
        }
    });
    $(document).unbind("keyup");
    $(document).bind("keyup", function (e) {
        iskeyCount = 0;
    });

    //div大框上 鼠标点击
    $("#content .divCol").unbind("mousedown");
    $("#content .divCol").bind("mousedown", function (e) {
        //点击鼠标事件
        if (isFinish == false) {
            if (3 == e.which) { //右键
                divClickRight(focusDivId);
            }
            else if (1 == e.which) { //左键
                divClickLeft(focusDivId);
            }
            else if (2 == e.which) {
                divClickMiddle(focusDivId);
                return false;   //页面有滚动条时，取消点击鼠标滚轮时弹出的滚动方向圈(IE OK, FireFox不好用)
            }
            $("#" + focusDivId).focus();
        }
        else {
            $("custMessage").html("已经结束");
            clearMessage("custmessage");
        }
    });
    //div内各雷区，鼠标经过
    $.each($("#content .divCol"), function () {
        $(this).unbind("mouseover");
        $(this).bind("mouseover", function () {
            $("#" + focusDivId).removeClass("divColMouse");
            $(this).addClass("divColMouse"); //鼠标移到目标的上方
            focusDivId = this.id;
            $(this).focus();
        });
    });
    /*    38
      37  40  39
    */
}
//设置样式，宽度 高度 等
function setCss() {
    var width = cols * (WidthHeight + 1); //cols * (31+1)
    var height = rows * (WidthHeight + 1);

    $("#contentField").css({ "width": (width + 50) + "px", "height": (height + 25) + "px" });
    // $("#progress").height(height);

    $("#content").css({ "width": width + "px", "height": height + "px" });
    $("#content2").css({ "width": width + "px", "height": height + "px" });

    $("#content divRow").css("width", width + "px");
    $(".divCommon").css({ "width": WidthHeight + "px", "height": WidthHeight + "px", "line-height": WidthHeight + "px" });
    $("#fieldset").css("width", (width + 10) + "px");
    if (WidthHeight == 20) {
        $(".divCommon").css("font-size", "12px");
    }
    else if (WidthHeight == 30) {
        $(".divCommon").css("font-size", "15px");
    }
    $("#fieldset").show();
    $("#fieldsetManage").hide();
}
//键盘操作 (上下左右 键盘数字1、2、3、4)
function keyDown(keyCode) {
    if (focusDivId != "") {
        var _focusDivId = focusDivId;
        if (keyCode == 37) { //左
            var _colId = parseInt(_focusDivId.split('_')[1]) - 1;
            for (var b = _colId; b >= 1; b--) {
                _focusDivId = _focusDivId.split('_')[0] + "_" + b.toString();
                if ($.inArray(_focusDivId, arrDomanage) <= -1 || $.inArray(_focusDivId, arrNumber) > -1) { //未标记的或数字都可以使用键盘获得焦点
                    $("#" + focusDivId).removeClass("divColMouse"); //去掉老焦点
                    $("#" + _focusDivId).addClass("divColMouse");
                    $("#" + _focusDivId).focus(); //设置新焦点
                    focusDivId = _focusDivId;
                    return false;
                }
            }
        }
        else if (keyCode == 38) { //上
            var _rowId = parseInt(_focusDivId.split('_')[0]) - 1;
            for (var b = _rowId; b >= 1; b--) {
                _focusDivId = b.toString() + "_" + _focusDivId.split('_')[1];
                if ($.inArray(_focusDivId, arrDomanage) <= -1 || $.inArray(_focusDivId, arrNumber) > -1) {
                    $("#" + focusDivId).removeClass("divColMouse");
                    $("#" + _focusDivId).addClass("divColMouse");
                    $("#" + _focusDivId).focus();
                    focusDivId = _focusDivId;
                    return false;
                }
            }
        }
        else if (keyCode == 39) { //右
            var _colId = parseInt(_focusDivId.split('_')[1]) + 1;
            for (var b = _colId; b <= cols; b++) {
                _focusDivId = _focusDivId.split('_')[0] + "_" + b.toString();
                if ($.inArray(_focusDivId, arrDomanage) <= -1 || $.inArray(_focusDivId, arrNumber) > -1) {
                    $("#" + focusDivId).removeClass("divColMouse");
                    $("#" + _focusDivId).addClass("divColMouse");
                    $("#" + _focusDivId).focus();
                    focusDivId = _focusDivId;
                    return false;
                }
            }
        }
        else if (keyCode == 40) { //下
            var _rowId = parseInt(_focusDivId.split('_')[0]) + 1;
            for (var b = _rowId; b <= rows ; b++) {
                _focusDivId = b.toString() + "_" + _focusDivId.split('_')[1];
                if ($.inArray(_focusDivId, arrDomanage) <= -1 || $.inArray(_focusDivId, arrNumber) > -1) {
                    $("#" + focusDivId).removeClass("divColMouse");
                    $("#" + _focusDivId).addClass("divColMouse");
                    $("#" + _focusDivId).focus();
                    focusDivId = _focusDivId;
                    return false;
                }
            }
        }
        else if (keyCode == 49 || keyCode == 97) {//左键
            divClickLeft(focusDivId);
        }
        else if (keyCode == 50 || keyCode == 98) { //中键
            divClickMiddle(focusDivId);
        }
        else if (keyCode == 51 || keyCode == 99) { //右键
            divClickRight(focusDivId);
        }
        else if (keyCode == 52 || keyCode == 100) { //扫雷结果提示。 主键盘键4 或 小键盘4
            helpClearBomb();
        }
    }
}
//左键 
function divClickLeft(divId) {
    if ($.inArray(divId, arrDoBomb) < 0) {  //不是用户标记的雷时，用户标记过得雷左键时无效果
        if ($.inArray(divId, arrBomb) >= 0) {
            isFinish = true;
            $("#" + divId).html("<img src=\"bomb.png\" style=\"width:" + WidthHeight + "px;height:" + WidthHeight + "px\" >");
            alert("地雷啊，你被炸了。再接再厉。");   //$("#btnBegin").click(); //开始按钮
            //$("#custMessage").unbind('DOMNodeInserted');
            $("#custMessage").html("排雷中...");
            setTimeout(function () { bombBangedAndEnd(1, false); }, 500);
        }
        else if ($.inArray(divId, arrBlank) >= 0) {    //点击空格的时候，其他连续的空格也展示出来奥。
            if ($.inArray(divId, arrDoBomb) >= 0) {   //标记为雷
                $("#" + divId).addClass("divOpen");
                $("#" + divId).html("");
            }
            getContinuousBlankDiv(divId);
        }
        else if ($.inArray(divId, arrNumber) >= 0) {   //数字，直接显示
            $.each(arrNumberContent, function (k, v) {
                if (v.Key == divId) {
                    $("#" + divId).html(v.Val);
                    $("#" + divId).addClass("divOpen");

                    if (getIsOdd(v.Val) == true) { //奇偶数显示不同颜色
                        $("#" + divId).addClass("divOdd");
                    } else {
                        $("#" + divId).addClass("divEven");
                    }
                    return false;
                }
            });
        }
        var _indexDoBomb = $.inArray(divId, arrDoBomb);
        if (_indexDoBomb >= 0) arrDoBomb.splice(_indexDoBomb, 1);
        if ($.inArray(divId, arrDomanage) < 0) arrDomanage.push(divId);
        isFinished();
    }
}
//右键 表示设定为 “雷|疑问|取消标记”
function divClickRight(divId) {
    if (($.inArray(divId, arrDomanage) < 0 && $("#" + divId).html() == "") || isNaN($("#" + divId).html()) == true) {
        if ($.inArray(divId, arrDomanage) < 0) {
            if ($("#" + divId).html().indexOf("mark2.png") > -1) { //标记为问号时，再点击右键，跳到这里。
                $("#" + divId).html("");
            }
            else { //第一次点击右键时，标记为雷
                $("#" + divId).html("<img src=\"mark1.png\" style=\"width:" + WidthHeight + "px;height:" + WidthHeight + "px\" >");
                if ($.inArray(divId, arrDoBomb) < 0) {
                    arrDoBomb.push(divId);
                    numResidue = numResidue - 1;
                }
                if ($.inArray(divId, arrDomanage) < 0) arrDomanage.push(divId);
            }
        }
        else { //已经标记为雷时，再点击右键，跳到这里。
            $("#" + divId).html("<img src=\"mark2.png\" style=\"width:" + WidthHeight + "px;height:" + WidthHeight + "px\" >");
            numResidue = numResidue + 1;
            var _indexDoBomb = $.inArray(divId, arrDoBomb);
            if (_indexDoBomb >= 0) {
                arrDoBomb.splice(_indexDoBomb, 1);
            }
            var _indexDomanage = $.inArray(divId, arrDomanage);
            if (_indexDomanage >= 0) {
                arrDomanage.splice(_indexDomanage, 1);
            }
        }
        $("#spanResidue").html(numResidue); //显示剩余多少雷数
        isFinished();
    }
}
//中键 
function divClickMiddle(divId) {
    if ($.inArray(divId, arrDomanage) < 0 || $.inArray(divId, arrDoBomb) >= 0) { //未知区域 || 被标记为雷 (当前点击的这是未知区域)
        //周圈去背景色
        var _aroundAll = new Array();
        $.each(getAroundDivByMiddle(divId), function (k, _id) {
            if ($.inArray(_id, _aroundAll) < 0) _aroundAll.push(_id);
            $("#" + _id).addClass("divCanelAround"); //周边闪烁（模拟）
        });
        setTimeout(function () {
            $.each(_aroundAll, function (k, v) {
                $("#" + v).removeClass("divCanelAround");
            });
        }, 200);  //0.2 秒后周边停止闪烁
    }
    else { //已知区域(当前点击的这是已知区域)
        if ($.inArray(divId, arrNumber) > -1) //如果是已知区域的数字 ，空格时不操作
        {
            getAroundByClickMiddleButton(divId);
        }
    }
    isFinished();
}
//当中键点击的是已知区域数字时，周圈全部显示 数值一层，空格递归
function getAroundByClickMiddleButton(id) {
    var _bomb = new Array();
    var _blank = new Array();
    var _num = new Array();
    var _aroundAllDoNot = new Array(); //_aroundAll
    var _arrDoBomb = new Array();

    $.each(getAroundDivByMiddle(id), function (k, _id) {
        if (_id != id) {
            if (arrDoBomb.length > 0 && $.inArray(_id, arrDoBomb) >= 0) {
                if ($.inArray(_id, _arrDoBomb) < 0) _arrDoBomb.push(_id); //缓存起来：这一圈中，用户打过雷标记的
            }
            if ($.inArray(_id, arrDomanage) < 0) { //没有遍历过的，才继续操作 && 没有被用户标记为雷
                // if ($.inArray(_id, arrTemp) < 0 && $.inArray(_id, arrDoBomb) < 0) { //没有遍历过的，才继续操作 && 没有被用户标记为雷
                if ($.inArray(_id, _aroundAllDoNot) < 0 && _id != id) _aroundAllDoNot.push(_id); //周圈闪烁的缓存起来 //_aroundAll
                if ($.inArray(_id, arrBomb) >= 0) { //是雷
                    if ($.inArray(_id, _bomb) < 0) _bomb.push(_id); //缓存起来
                }
                if ($.inArray(_id, arrBlank) >= 0) {
                    if ($.inArray(_id, _blank) < 0) _blank.push(_id); //缓存起来
                }
                if ($.inArray(_id, arrNumber) >= 0) {
                    if ($.inArray(_id, _num) < 0) _num.push(_id); //缓存起来
                }
            }
        }
    });
    var _lengths = _bomb.length;
    if (_lengths == 0) { //没有雷
        for (var i = 0; i < _blank.length; i++) {
            if ($.inArray(_blank[i], arrDomanage) < 0) arrDomanage.push(_blank[i]);
            if ($.inArray(_blank[i], arrTemp) < 0) arrTemp.push(_blank[i]);
            $("#" + _blank[i]).addClass("divOpen");
            $("#" + _blank[i]).html("");
            getContinuousBlankDiv(_blank[i]);
        }
        for (var i = 0; i < _num.length; i++) {
            //如果是数字，则显示，不再往下递归。这样可以保证空白下的第一层数字显示。
            var text = getNumber(_num[i]);
            $("#" + _num[i]).html(text);
            $("#" + _num[i]).addClass("divOpen");

            if ($.inArray(_num[i], arrDomanage) < 0) arrDomanage.push(_num[i]);
            if ($.inArray(_num[i], arrTemp) < 0) arrTemp.push(_num[i]);

            if (getIsOdd(text) == true) {
                $("#" + _num[i]).addClass("divOdd");
            } else {
                $("#" + _num[i]).addClass("divEven");
            }
        }
    }
    else if (_lengths >= 1) {
        var _wrongDoBomb = [];
        _arrDoBomb.forEach(function (v) {
            if ($.inArray(v, arrBomb) < 0) { //如果雷标记打错了，就爆炸。
                _wrongDoBomb.push(v);
            }
        });
        if (_wrongDoBomb.length == 0) {
            $("#" + id).addClass("divCanel"); //显示红叉号
            setTimeout(function () {
                $("#" + id).removeClass("divCanel");
            }, 200); //0.2秒后 去掉红叉号

            $.each(_aroundAllDoNot, function (k, v) {  //_aroundAll
                $("#" + v).addClass("divCanelAround"); //周边闪烁
            });
            setTimeout(function () {
                $.each(_aroundAllDoNot, function (k, v) { //_aroundAll
                    $("#" + v).removeClass("divCanelAround");
                });
            }, 200);  //0.2 秒后周边停止闪烁
        }
        else {
            isFinish = true;
            $.each(_wrongDoBomb, function (k, v) {
                $("#" + v).html("<img src=\"cancel.png\" style=\"width:" + WidthHeight + "px;height:" + WidthHeight + "px\" >");
            });
            alert("地雷啊，你被炸了。再接再厉。");   //$("#btnBegin").click(); //开始按钮
            //$("#custMessage").unbind('DOMNodeInserted');
            $("#custMessage").html("排雷中...");
            setTimeout(function () { bombBangedAndEnd(1, false); }, 500);
        }
    }
}
//判断扫雷是否结束
function isFinished() {
    if (arrBomb.sort().toString() == arrDoBomb.sort().toString()
        && arrAllDivId.sort().toString() == arrDomanage.sort().toString()) {
        isFinish = true;
        $("#custMessage").html("<b>恭喜，扫雷完毕，用时" + $("#spanSecond").html() + "秒。</b>");
        //$("#custMessage").unbind("DOMNodeInserted");
        //bombBangedAndEnd(1, true);
        setTimeout(function () { bombBangedAndEnd(1, true); }, 500);
    }
}
//引爆和完成后
function bombBangedAndEnd(bRow, issuccess) {
    $("#progress").show();
    for (var j = 1; j <= cols; j++) {
        var _id = bRow.toString() + "_" + j.toString();
        if ($("#" + _id + " :eq(0)").attr("src") == "cancel.png") {
            $("#" + _id + " :eq(0)").remove();
        }
        if ($.inArray(_id, arrBomb) >= 0) {
            $("#" + _id).html("<img src=\"bomb.png\" style=\"width:" + WidthHeight + "px;height:" + WidthHeight + "px\" >");
        }
    }
    if (bRow <= rows) {
        $("#progress").height(bRow * (WidthHeight + 1));
        setTimeout(function () { bombBangedAndEnd(bRow + 1, issuccess); }, 200);
    }
    else {
        $("#progress").hide();
        if (!issuccess) { //不是排雷完毕，就清空备注
            $("#custMessage").html("");
        }
    }
}
//当点击的是空格雷区时，同时释放相邻的空格,使用递归算法 
function getContinuousBlankDiv(id) {
    $.each(getAroundDivByMiddle(id), function (k, _id) {
        if ($.inArray(_id, arrTemp) < 0 && $.inArray(_id, arrDoBomb) < 0) { //没有遍历过的，才继续操作 && 没有被用户标记为雷
            if ($.inArray(_id, arrDomanage) < 0) arrDomanage.push(_id);
            if ($.inArray(_id, arrTemp) < 0) arrTemp.push(_id);

            if ($.inArray(_id, arrBlank) >= 0) {
                $("#" + _id).addClass("divOpen");
                $("#" + _id).html("");
                if ($.inArray(_id, arrBomb < 0)) {
                    getContinuousBlankDiv(_id);
                }
            }
            else if ($.inArray(_id, arrNumber) >= 0) { //如果是数字，则显示，不再往下递归。这样可以保证空白下的第一层数字显示。
                var text = getNumber(_id);
                $("#" + _id).html(text);
                $("#" + _id).addClass("divOpen");

                if (getIsOdd(text) == true) {
                    $("#" + _id).addClass("divOdd");
                } else {
                    $("#" + _id).addClass("divEven");
                }
            }
            //$("#" + _id).unbind(); //取消鼠标事件
        }
    });

}
//计算周边的布局
function getAroundDivByMiddle(id) {
    var rB = 1, rE = 1, cB = 1, cE = 1;
    var rCurr = 1, cCurr = 1;
    rCurr = parseInt(id.split('_')[0]); //"1_1"
    cCurr = parseInt(id.split('_')[1]); //"3_5"

    rB = rCurr - 1; if (rB < 1) rB = 1;
    rE = rCurr + 1; if (rE > rows) rE = rows;

    cB = cCurr - 1; if (cB < 1) cB = 1;
    cE = cCurr + 1; if (cE > cols) cE = cols;

    var _arrReturn = new Array();
    for (var i = rB; i <= rE; i++) {
        for (var j = cB; j <= cE; j++) {
            var _id = i.toString() + "_" + j.toString();
            if ($.inArray(_id, _arrReturn) < 0) {
                _arrReturn.push(_id);
            }
        }
    }
    return _arrReturn;
}
//根据方格周边的内容，计算本方格显示什么，数字 or 空格
function getTypeFromAround(id) {
    var num = 0;
    $.each(getAroundDivByMiddle(id), function (k, _id) {
        if ($.inArray(_id, arrBomb) >= 0) {
            num++;
        }
    });
    if (num > 0) {
        if ($.inArray(id, arrNumber) < 0) {
            arrNumber.push(id);
            arrNumberContent.push(new BombContentModel(id, num)); //数字的话，保存
        }
    }
    else {
        if ($.inArray(id, arrBlank) < 0) {
            arrBlank.push(id);
        }
    }
    return num;
}
//帮助排雷
function helpClearBomb() {
    if (focusDivId != "") {
        if (lblhelpCount <= 0) {
            $("#custMessage").html("<font color=\"red\">次数使用完了</font>");
            clearMessage("custmessage");
        }
        else {
            var _counts = 0;
            var _arrAround = getAroundDivByMiddle(focusDivId);
            $.each(_arrAround, function (k, _id) {
                if ($.inArray(_id, arrDomanage) <= -1) {  //用户 未标记过得de雷区
                    if ($.inArray(_id, arrBomb) > -1) { //雷
                        divClickRight(_id);
                    }
                    else { //数字 or  //空格
                        divClickLeft(_id);
                    }
                } else { //用户标记过得雷区
                    _counts++;
                }
            });
            if (_counts < _arrAround.length) {
                lblhelpCount = lblhelpCount - 1;
            } else {
                $("#custMessage").html("<font color=\"red\">空区域不使用提示</font>");
                clearMessage("custmessage");
            }
            $("#lblhelpCount").html(lblhelpCount.toString());
        }
    } else {
        $("#custMessage").html("<font color=\"red\">请把鼠标放到排雷区</font>");
        clearMessage("custmessage");
    }
}
//用时多少秒
function setTimeUsed() {
    var nowTime = new Date();
    var s = Math.floor((nowTime.getTime() - beginTime.getTime()) / 1000);
    if (isFinish == false) {
        $("#spanSecond").html(s);
        setTimeout(setTimeUsed, 1000);
    }
}
//定时清空一些提示信息
function clearMessage(str) {
    if (str == "spanlevelmessage") { //清空错误信息
        if ($("#spanLevelMessage").html() != "") {
            setTimeout(function () {
                $("#spanLevelMessage").html("");
            }, 3000);
        }
    }
    else if (str == "custmessage") { //清空自定义时的描述信息
        if ($("#custMessage").html() != "") {
            setTimeout(function () {
                $("#custMessage").html("");
            }, 3000);
        }
    }
}
//ID和数值坐标的model
function BombContentModel(key, val) {
    this.Key = key,
    this.Val = val
}
//获取随机雷位置坐标
function GetRandomBomb() {
    for (var i = 1; i <= bombCount; i++) {
        getRandom(); //多少个雷，参数都为 雷的设定数量。
    }
}
//获取随机数
function getRandom() {
    var randomId = parseInt(Math.random() * rows + 1).toString() + "_" + parseInt(Math.random() * cols + 1).toString();
    if ($.inArray(randomId, arrBomb) >= 0) { //如果随机的已经存在，就再获取一次
        getRandom();
    }
    else {
        arrBomb.push(randomId);
    }
}
//获取div数值
function getNumber(id) {
    var returnval = "";
    $.each(arrNumberContent, function (k, v) {
        if (v.Key == id) {
            returnval = v.Val;
            return false;
        }
    });
    return returnval;
}
//判断是否是奇|偶数
function getIsOdd(num) {
    var returnVal = false;
    var a = parseInt(num);
    switch (a % 2) {
        case 0:
            returnVal = true; //偶数
            break;
        case 1:
            returnVal = false; //奇数
            break;
    }
    return returnVal;
}
//判断是否是数字格式
function IsNumber(str) {
    var number = /^([1-9]\d*)$/;
    return number.test(str);
}